package com.wbl.train.business.service;

import com.wbl.train.common.business.dto.DailyTrainCarriageDto;
import com.wbl.train.common.business.entity.DailyTrainCarriageEntity;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wbl.train.common.page.PageVo;

import java.time.LocalDate;
import java.util.Date;
import java.util.List;

/**
 * 每日车厢 服务类
 * @author 王博纶
 * @since 2024-02-11
 */
public interface DailyTrainCarriageService extends IService<DailyTrainCarriageEntity> {

    /**
     * 查询火车车厢的信息
     * @param dailyTrainCarriageDto 火车车厢DTO
     * @return 分页信息
     */
    PageVo<DailyTrainCarriageEntity> queryTrainCarriage(DailyTrainCarriageDto dailyTrainCarriageDto);

    /**
     * 新增火车车厢
     * @param dailyTrainCarriage 火车车厢
     * @return 是否新增成功
     */
    boolean insertAndUpdateTrain(DailyTrainCarriageEntity dailyTrainCarriage);

    /**
     * 根据trainCode查询所有的车厢信息
     * @param trainCode 火车对应的车次编号
     * @return 当前车次下的所有的车厢信息
     */
    List<DailyTrainCarriageEntity> selectByTrainCode(String trainCode);

    /**
     * 生成火车车厢信息
     * @param date 要生成的日期
     * @param trainCode 火车编号
     * @param now 当前时间
     */
    void genDailyCarriage(LocalDate date, String trainCode, Date now);

    /**
     * 根据火车编号，日期和座位类型选择车厢
     * @param date 日期
     * @param trainCode 火车编号
     * @param seatType 座位类型
     * @return 选择的车厢的列表
     */
    List<DailyTrainCarriageEntity> selectBySeatType(LocalDate date, String trainCode, String seatType);
}
